import axios from 'axios'
import store from '@/store'
import {Message} from 'element-ui'
import router from '@/router'
const service =axios.create({  
  baseURL:process.env.VUE_APP_BASE_API, //基础地址
  timeout:20000
})//创建一个新的axios实例

// 请求拦截器
// 成功执行1   失败执行2
service.interceptors.request.use((config)=>{
  //注入token
  // store.getters.token => 请求头里面
  if(store.getters.token){
    config.headers.Authorization =`Bearer ${store.getters.token}`
  }
  return config
},(error)=>{
  //失败执行promise
  return Primise.reject(error)
})

// 相应拦截器
service.interceptors.response.use((response)=>{
//axios默认包裹了data
//判断是不是Blob
if(response.data instanceof Blob) return response.data //返回Blob对象
const {data,message,success} = response.data  //默认json格式
if(success) {
  return data
}else {
  
  Message({type:'error',message})
  return Promise.reject(new Error(message))
}
 
},async (error)=>{
  if(error.response.status === 401) {
    Message({type:'warning',message:'token超时,请重新登录'})
    //说明token超时了
    await store.dispatch('user/logout')  //调用action 退出登录
    // 主动跳转到登录页
    router.push('/login') //跳转到登录页
    return Promise.reject(error)
  }
  //error.message
  Message({type:'error',message:error.message})
  return Promise.reject(error)  //使用一个npm包 直接将blob文件下载到本地 file-saver
})
export default service